Computer programs have become increasingly complex as they provide more features. As complexity increases, the probability that a computer program will contain a programming error also increases dramatically. To reduce the probability of distributing a computer program with a programming error, software developers perform extensive testing.
Testing is also performed to measure and improve the performance of computer programs. Performance measurement involves monitoring the amount of time, e.g., processor cycles, used by the individual functions that make up a program. This knowledge enables developers to focus their efforts on improving the performance of components that need the most improvement. Because of the importance of thorough testing and because such testing can be very time-consuming, software developers have developed extensive testing procedures.
Some testing procedures involve inserting functions known as probes at selected points in computer code, such as entry and exit points of functions. These probes collect information of interest to the software developer, such as time stamps, stack addresses, and other counters and data records. This information allows developers to analyze and tune application performance.
Such profiling operations typically collect large amounts of data, particularly for long running and call intensive applications. As a result, data storage requirements and demands on processing resources are considerable. To address these issues, data compression techniques have been proposed to reduce data storage and processing needs. Most such techniques are dictionary-based and require a large amount of data to decompress selected data. For example, in certain techniques, to decompress a particular piece of information, it is necessary to decompress all of the information preceding the desired piece. As a result, real-time access to the compressed data is limited. In addition, many compression techniques are lossy and result in the loss of a certain amount of information. Compression also consumes computing resources and may have adverse effects on the accuracy of the profiling operation itself.
These limitations impede the usefulness of conventional data compression techniques in profiling operations, in which real-time access to data is important, and in which minimal interference with the profiling operation is desirable. Accordingly, a need continues to exist for a data compression scheme that adequately addresses these issues. For maximum usefulness in profiling, it is desirable that the data compression scheme have a minimal effect on the performance data itself. Further, the data compression scheme should be easily integrated into the logging engine that collects the profiling data, and should be easily enabled or disabled by the user.